import os
import csv
from bs4 import BeautifulSoup
import re

# 定义输入和输出路径
input_dir = "music-dump"
output_file = "music-dump.csv"

# 创建CSV文件并写入表头
with open(output_file, 'w', newline='', encoding='utf-8') as csvfile:
    csv_writer = csv.writer(csvfile)
    # 写入表头：歌曲标题、一级目录、二级目录、文件名
    csv_writer.writerow(['歌曲标题', '一级目录', '二级目录', '文件名'])
    
    # 遍历music-dump目录下的所有HTML文件
    for filename in os.listdir(input_dir):
        if filename.endswith('.html'):
            file_path = os.path.join(input_dir, filename)
            
            try:
                # 读取HTML文件内容
                with open(file_path, 'r', encoding='utf-8', errors='ignore') as html_file:
                    html_content = html_file.read()
                
                # 使用BeautifulSoup解析HTML
                soup = BeautifulSoup(html_content, 'html.parser')
                
                # 查找面包屑导航元素
                breadcrumb_items = soup.find_all('li', class_='breadcrumb-item')
                
                # 初始化变量
                song_title = ""
                first_level = ""
                second_level = ""
                
                # 提取歌曲标题（带active类的元素）
                active_item = soup.find('li', class_='breadcrumb-item active')
                if active_item:
                    song_title = active_item.get_text(strip=True)
                
                # 提取目录层级
                if len(breadcrumb_items) >= 2:
                    # 第一个通常是"首页"，跳过
                    if len(breadcrumb_items) >= 3:
                        first_level = breadcrumb_items[1].get_text(strip=True)
                    if len(breadcrumb_items) >= 4:
                        second_level = breadcrumb_items[2].get_text(strip=True)
                
                # 写入CSV
                if song_title:  # 只有当找到歌曲标题时才写入
                    csv_writer.writerow([song_title, first_level, second_level, filename])
                    print(f"已处理: {filename} - {song_title}")
                else:
                    print(f"警告: 在 {filename} 中未找到歌曲标题")
                    
            except Exception as e:
                print(f"处理文件 {filename} 时出错: {e}")

print(f"处理完成! 数据已保存到 {output_file}")
